package com.lcy.algorithm.huawei;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;

/**
 * 题目描述
 * 给定一个数组，编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
 *
 * 说明：
 *
 * 数组中数字范围[0, 1000]
 * 最大N个数与最小N个数不能有重叠，如有重叠，输入非法返回-1
 * 输入非法返回-1
 * 输入描述
 * 第一行输入M， M标识数组大小
 * 第二行输入M个数，标识数组内容
 * 第三行输入N，N表达需要计算的最大、最小N个数
 * 输出描述
 * 输出最大N个数与最小N个数的和
 *
 * 用例
 * 输入
 * 5
 * 95 88 83 64 100
 * 2
 *
 * 输出	342
 * 说明	最大2个数[100,95],最小2个数[83,64], 输出为342。
 * 输入
 * 5
 * 3 2 3 4 2
 * 2
 *
 * 输出	-1
 * 说明	最大2个数[4,3],最小2个数[3,2], 有重叠输出为-1。
 */
public class 最大N个数和最小N个数的和 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashSet<Integer> set = new HashSet<>();
        int size = sc.nextInt();
        for (int i = 0; i<size ; i++) {
            int num = sc.nextInt();
            //数组中数字范围[0, 1000]
            if (num < 0 || num > 1000){
                System.out.println(-1);
                return;
            }
            set.add(num);
        }
        int n = sc.nextInt();
        //最大N个数与最小N个数不能有重叠，如有重叠，输入非法返回-1
        if (set.size() < n * 2) {
            System.out.println(-1);
            return;
        }
        System.out.println(getResult(set, n));
    }

    public static int getResult(HashSet<Integer> set, int n) {
        //set无序,转成数组排序
        Integer[] array = set.toArray(new Integer[0]);
        //升序降序无所谓
        Arrays.sort(array, Comparator.comparingInt(a -> a));
        int sum = 0;

        for(int i = 0 ; i<n; i++){
            sum += array[i] + array[array.length - i - 1];
        }

        return sum;
    }
}
